// 向登录接口发送请求时需要携带的参数的TS类型↓
export interface typeOfLoginParams {
  username: string;
  password: string;
}
// 为登录接口的响应数据中的“data”字段定义TS类型↓
/* export interface typeOfPropertyNamedDataInTheResponceDataOfLogin {
  // token: string;
  // 注：在可选属性后面加上问号（可选链操作符），表示该属性是可选的（由于用户登录成功时服务器返回的数据中有token属性，而用户登录失败时返回的数据中没有它，所以它是“可选属性”）↓
  token?: string;
  // 同理，message属性也是可选的（因为只有用户登录失败时才会弹出错误提示信息）↓
  message?:string;
} */
// 为所有接口的响应数据中都拥有的属性（字段）（也就是“公共属性”）定义TS类型↓
export interface typeOfCommonPropertyInTheResponceDataOfAllOfTheApis {
  code: number;
  message: string;
  ok: boolean;
}

    
// 为登录接口的响应数据定义TS类型↓
/* export interface typeOfResponceDataOfLogin {
  code: number;
  data: typeOfPropertyNamedDataInTheResponceDataOfLogin;
} */
export interface typeOfResponceDataOfLogin extends typeOfCommonPropertyInTheResponceDataOfAllOfTheApis {
  data: string; // 注：因为“登录接口”从“mock接口”改为使用“真实接口”后，服务器返回的“data”字段的值本身就是“token”字符串，而不再是一个对象，所以此处将“data”字段的类型定义为“string”类型

}
// 为服务器返回的用户信息定义TS类型↓
  export interface typeOfUserInfo {
    userId: number;
    avatar:string,
    username: string,
    password: string,
    desc: string,
    // 注：为数组定义类型时，需要使用数组类型语法“type[]”（其中“type”表示数组成员的数据类型）↓
    roles: string[],
    buttons: string[],
    routes: string[],
    token: string,
  }

// 为获取用户信息接口的响应数据中的“data”字段定义TS类型↓
export interface typeOfPropertyNamedDataInTheResponceDataOfGetUserInfo {
  checkUser: typeOfUserInfo;
}
// 为获取用户信息接口的响应数据定义TS类型↓
/* export interface typeOfResponceDataOfGetUserInfo {
  code: number;
  data: typeOfPropertyNamedDataInTheResponceDataOfGetUserInfo;
} */
export interface typeOfResponceDataOfGetUserInfo extends typeOfCommonPropertyInTheResponceDataOfAllOfTheApis {
  data:{
    // 注：因为路由信息（即“routes”字段）自身是一个数组，且其中存放的内容是“菜单权限标识”，所以此处使用了数组类型语法“type[]”，数组成员的类型为“string”↓
    routes: string[],
    // 注：因为按钮权限信息（即“buttons”字段）自身是一个数组，且其中存放的内容是“按钮权限标识”，所以此处也使用了数组类型语法“type[]”，数组成员的类型也是“string”↓
    buttons: string[],
    roles: string[], // 此处使用“数组类型语法”的原因同上↑
    name: string,
    avater: string,
  }
}
